//package com.xls.commonlibrary.ad.adn.ks;
//
//import android.app.Activity;
//import android.content.pm.ActivityInfo;
//import android.text.TextUtils;
//import android.util.Log;
//import android.webkit.ValueCallback;
//
//import com.google.gson.Gson;
//import com.kwad.sdk.api.KsInnerAd;
//import com.kwad.sdk.api.KsLoadManager;
//import com.kwad.sdk.api.KsRewardVideoAd;
//import com.kwad.sdk.api.KsScene;
//import com.kwad.sdk.api.KsVideoPlayConfig;
//import com.kwad.sdk.api.SdkConfig;
//import com.kwad.sdk.api.model.RewardTaskType;
//import com.xls.commonlibrary.ad.adn.reward.bean.AdBean;
//import com.xls.commonlibrary.constant.Const;
//import com.xls.commonlibrary.util.ICallback;
//import com.xls.commonlibrary.util.MMKVUtil;
//
//import org.jetbrains.annotations.Nullable;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import io.reactivex.rxjava3.annotations.NonNull;
//
//public class KsAdUtil {
//
//    private String TAG = "KsAdUtil";
//    private Activity activity;
//
//    private static volatile KsAdUtil singleton = null;
//    private String mEcpm;// 本次ecpm
//
//    private KsAdUtil(Activity activity) {
//        this.activity = activity;
//    }
//
//    public static KsAdUtil getInstance(Activity activity) {
//        if (singleton == null) {
//            synchronized (KsAdUtil.class) {
//                if (singleton == null) {
//                    singleton = new KsAdUtil(activity);
//                }
//            }
//        }
//        return singleton;
//    }
//
//    static ICallback mCallback;
//    private String mPosId = "";//90009001 for test
//    private ValueCallback<String> callback;
//    private ValueCallback<AdBean> callbackShow;// 播放 专用回调   将AdBean回调到UI层
//    private boolean isShow = true; // 默认show广告，单纯取ecpm的时候，不show
//
//    //  快手广告相关
//    private void requestRewardAd() {
//
//
//        Map<String, String> rewardCallbackExtraData = new HashMap<>();
////        if (mServerCallbackSwitch.isChecked()) {
////            //开启服务端回调后的配置参数
////            rewardCallbackExtraData.put("thirdUserId", "test-uerid-jia");
////            rewardCallbackExtraData.put("extraData", "testExtraData");
////        }
//
//
//        //视频展示的屏幕方向，建议和当前屏幕方向一致
//        int screenOrientation = activity.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ?
//                SdkConfig.SCREEN_ORIENTATION_PORTRAIT : SdkConfig.SCREEN_ORIENTATION_LANDSCAPE;
//
//        //构建请求参数，此为测试posId，请联系快手平台申请正式posId
//        KsScene.Builder builder = KSSdkInitUtil.createKSSceneBuilder(Long.parseLong(mPosId))
//                .screenOrientation(screenOrientation)
//                .rewardCallbackExtraData(rewardCallbackExtraData);
//
//        // 2中竞价模式
//        if (!TextUtils.isEmpty(mBidResponseV1)) { // 设置在服务端竞价后的广告信息
//            builder.setBidResponse(mBidResponseV1);
//        } else if (!TextUtils.isEmpty(mBidResponseV2)) {
//            builder.setBidResponseV2(mBidResponseV2);
//        }
//
//        KsScene scene = builder.build();
//
//        final long startTime = System.currentTimeMillis();
//        KSSdkInitUtil.getLoadManager().loadRewardVideoAd(scene, new KsLoadManager.RewardVideoAdListener() {
//            @Override
//            public void onError(int code, String msg) {
//                //TToast.show(MainApplication.getAppContext(), "激励视频广告请求失败" + code + msg);
//                Log.e(TAG, "Callback --> onError: " + code + ", " + msg);
//
//                callbackShowFail();
//
//                LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "loadRewardVideoAd_onError");
//            }
//
//            @Override
//            public void onRewardVideoResult(@Nullable List<KsRewardVideoAd> adList) {
//                //TToast.show(MainApplication.getAppContext(), "激励视频广告数据请求成功");
//                //视频广告的数据加载完毕，在此回调后，可以播放在线视频，网络不好可能出现加载缓冲，影响体验。
//                Log.e(TAG, "Callback --> onRewardVideoResult time: "
//                        + (System.currentTimeMillis() - startTime));
//                LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onRewardVideoResult");
//
////                if (mPlayOnlineSwitch.isChecked()) {
////                    showRewardVideoAd(adList);
////                }
//                showRewardVideoAd(adList);
//            }
//
//            @Override
//            public void onRewardVideoAdLoad(@Nullable List<KsRewardVideoAd> adList) {
//                //TToast.show(MainApplication.getAppContext(), "激励视频广告数据请求且资源缓存成功");
//                //视频广告的数据加载和资源缓存完毕，在此回调后，播放本地视频，流畅不阻塞。
//                Log.e(TAG, "Callback --> onRewardVideoAdLoad time: "
//                        + (System.currentTimeMillis() - startTime));
//                LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onRewardVideoAdLoad");
//
////                if (!mPlayOnlineSwitch.isChecked()) {
////                    showRewardVideoAd(adList);
////                }
//                showRewardVideoAd(adList);
//            }
//        });
//    }
//
//    private void showRewardVideoAd(@Nullable List<KsRewardVideoAd> adList) {
//        if (!isShow) return;// 纯获取ecpm，不show
//
//
//        if (activity.isFinishing()) {
//            return;
//        }
//        if (adList == null || adList.isEmpty()) {
//            return;
//        }
//        //TToast.show(MainApplication.getAppContext(), "激励视频广告请求成功");
//
////        if (!mShowAfterRequestSwitch.isChecked()) {
////            return;
////        }
//
//        KsRewardVideoAd rewardVideoAd = adList.get(0);
//
//        //1.设置监听
//        setRewardListener(rewardVideoAd);
//
//        //2.设置展示配置
//        KsVideoPlayConfig videoPlayConfig = new KsVideoPlayConfig.Builder()
//                //.showLandscape(mShowLandscapeSwitch.isChecked()) // 横屏播放, 建议和当前屏幕方向保持一致
//                .showLandscape(false) // 横屏播放, 建议和当前屏幕方向保持一致
//                .build();
//        //3.展示激励视频广告
//        rewardVideoAd.showRewardVideoAd(activity, videoPlayConfig);
//
//    }
//
//    private void setRewardListener(@NonNull KsRewardVideoAd rewardVideoAd) {
//        rewardVideoAd.setInnerAdInteractionListener(
//                new KsInnerAd.KsInnerAdInteractionListener() {
//                    @Override
//                    public void onAdClicked(KsInnerAd ksInnerAd) {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频内部广告点击：" + ksInnerAd.getType());
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onAdClicked_Inner");
//                    }
//
//                    @Override
//                    public void onAdShow(KsInnerAd ksInnerAd) {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频内部广告曝光：" + ksInnerAd.getType());
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onAdShow_Inner");
//                    }
//                });
//
//        rewardVideoAd
//                .setRewardAdInteractionListener(new KsRewardVideoAd.RewardAdInteractionListener() {
//                    @Override
//                    public void onAdClicked() {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频广告点击");
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onAdClicked");
//                    }
//
//                    @Override
//                    public void onPageDismiss() {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频广告关闭");
//
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onPageDismiss");
//
//                        callbackShowSuccess();
//
//
//                        mCallback.callback();
//
//
//
//                    }
//
//                    @Override
//                    public void onVideoPlayError(int code, int extra) {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频广告播放出错");
//
//                        callbackShowSuccess();
//
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onVideoPlayError");
//                    }
//
//                    @Override
//                    public void onVideoPlayEnd() {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频广告播放完成");
//
//                        callbackShowSuccess();
//
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onVideoPlayEnd");
//                    }
//
//                    @Override
//                    public void onVideoSkipToEnd(long playDuration) {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频广告跳过播放完成");
//
//                        callbackShowSuccess();
//
//
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onVideoSkipToEnd");
//                    }
//
//                    @Override
//                    public void onVideoPlayStart() {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频广告播放开始");
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onVideoPlayStart");
//                    }
//
//                    /**
//                     * 激励视频广告激励回调，只会回调一次
//                     */
//                    @Override
//                    public void onRewardVerify() {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频广告获取激励");
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onRewardVerify");
//                    }
//
//                    /**
//                     *  视频激励分阶段回调
//                     * @param taskType 当前激励视频所属任务类型
//                     *                 RewardTaskType.LOOK_VIDEO 观看视频类型             属于浅度奖励类型
//                     *                 RewardTaskType.LOOK_LANDING_PAGE 浏览落地页N秒类型  属于深度奖励类型
//                     *                 RewardTaskType.USE_APP 下载使用App N秒类型          属于深度奖励类型
//                     * @param currentTaskStatus  当前所完成任务类型，@RewardTaskType中之一
//                     */
//                    @Override
//                    public void onRewardStepVerify(int taskType, int currentTaskStatus) {
////                        TToast.show(MainApplication.getAppContext(), "激励视频广告分阶段获取激励，当前任务类型为：" + getTaskStatusStr(taskType) +
////                                "，当前完成任务类型为：" + getTaskStatusStr(currentTaskStatus));
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onRewardStepVerify");
//                    }
//
//                    @Override
//                    public void onExtraRewardVerify(int extraRewardType) {
//                        //TToast.show(MainApplication.getAppContext(), "激励视频广告获取额外奖励：" + extraRewardType);
//                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onExtraRewardVerify");
//                    }
//                });
//
//        // 设置"再看一个" 广告的监听
////        rewardVideoAd
////                .setRewardPlayAgainInteractionListener(new KsRewardVideoAd.RewardAdInteractionListener() {
////                    private static final String PREFIX = "再看一个";
////
////                    @Override
////                    public void onAdClicked() {
////                        //TToast.show(MainApplication.getAppContext(), PREFIX + "激励视频广告点击");
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onAdClicked" + "_" + PREFIX);
////                    }
////
////                    @Override
////                    public void onPageDismiss() {
////                        //TToast.show(MainApplication.getAppContext(), PREFIX + "激励视频广告关闭");
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onPageDismiss" + "_" + PREFIX);
////                    }
////
////                    @Override
////                    public void onVideoPlayError(int code, int extra) {
////                        //TToast.show(MainApplication.getAppContext(), PREFIX + "激励视频广告播放出错");
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onVideoPlayError" + "_" + PREFIX);
////                    }
////
////                    @Override
////                    public void onVideoPlayEnd() {
////                        //TToast.show(MainApplication.getAppContext(), PREFIX + "激励视频广告播放完成");
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onVideoPlayEnd" + "_" + PREFIX);
////                    }
////
////                    @Override
////                    public void onVideoSkipToEnd(long playDuration) {
////                        //TToast.show(MainApplication.getAppContext(), PREFIX + "激励视频广告跳过播放完成");
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onVideoSkipToEnd" + "_" + PREFIX);
////                    }
////
////                    @Override
////                    public void onVideoPlayStart() {
////                        //TToast.show(MainApplication.getAppContext(), PREFIX + "激励视频广告播放开始");
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onVideoPlayStart" + "_" + PREFIX);
////                    }
////
////                    /**
////                     * 激励视频广告激励回调，只会回调一次
////                     */
////                    @Override
////                    public void onRewardVerify() {
////                        //TToast.show(MainApplication.getAppContext(), PREFIX + "激励视频广告获取激励");
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onRewardVerify" + "_" + PREFIX);
////                    }
////
////                    /**
////                     *  视频激励分阶段回调
////                     * @param taskType 当前激励视频所属任务类型
////                     *                 RewardTaskType.LOOK_VIDEO 观看视频类型             属于浅度奖励类型
////                     *                 RewardTaskType.LOOK_LANDING_PAGE 浏览落地页N秒类型  属于深度奖励类型
////                     *                 RewardTaskType.USE_APP 下载使用App N秒类型          属于深度奖励类型
////                     * @param currentTaskStatus  当前所完成任务类型，@RewardTaskType中之一
////                     */
////                    @Override
////                    public void onRewardStepVerify(int taskType, int currentTaskStatus) {
////                        //TToast.show(MainApplication.getAppContext(), "激励视频广告分阶段获取激励，当前任务类型为：" + getTaskStatusStr(taskType) +
//////                                "，当前完成任务类型为：" + getTaskStatusStr(currentTaskStatus));
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onRewardStepVerify" + "_" + PREFIX);
////                    }
////
////                    @Override
////                    public void onExtraRewardVerify(int extraRewardType) {
////                        //TToast.show(MainApplication.getAppContext(), PREFIX + "激励视频广告获取额外奖励：" + extraRewardType);
////                        LogUtils.recodeCallback(LogUtils.SCENE_REWARD_PRE, "onExtraRewardVerify" + "_" + PREFIX);
////                    }
////                });
//    }
//
//    private String getTaskStatusStr(int taskType) {
//        String taskStatusStr = "";
//        switch (taskType) {
//            case RewardTaskType.LOOK_VIDEO:
//                taskStatusStr = "观看视频";
//                break;
//            case RewardTaskType.LOOK_LANDING_PAGE:
//                taskStatusStr = "浏览落地页";
//                break;
//            case RewardTaskType.USE_APP:
//                taskStatusStr = "使用APP";
//                break;
//        }
//        return taskStatusStr;
//    }
//
//
//    /********   服务端竞价模拟 start   ********/
//    private String mBidResponseV1;
//    private String mBidResponseV2;
//
//    // 获取服务端竞价信息
//    private void fetchBidResponseV1() {
//
//        //TToast.show(MainApplication.getAppContext(), "ks get bid ad");
//
//        mBidResponseV1 = null;
//        mBidResponseV2 = null;
//        KsScene ksScene = KSSdkInitUtil.createKSSceneBuilder(Long.parseLong(mPosId))
//                .build(); // 根据需要传入场景参数，需传入有效posId
//        String token = KSSdkInitUtil.getLoadManager().getBidRequestToken(ksScene);
//        KSBiddingUtils.fetchBidResponse(activity, Long.parseLong(mPosId), token, false,
//                new KSBiddingUtils.FetchResponseCallback() {
//                    @Override
//                    public void onSuccess(String bidResponse) {
//
//                        if ("-1".equals(bidResponse)) {
//                            Log.d(TAG, "获取竞价信息失败");
//                            callback("-1");
//
//                            callbackShowFail();
//
//                            return;
//                        }
//
//
//                        mBidResponseV1 = bidResponse;
//
////                        KSToastUtil.showToast(MainApplication.getAppContext(), "mBidResponseV1=" + mBidResponseV1);
////                        {
////                            adBids: [
////                            {
////                                bidEcpm: 100,
////                                        creativeId: 33045140888,
////                                    ecpm: 0,
////                                    materialId: "2006203568804644001_33045140888",
////                                    winNoticeUrl: "https://open.e.kuaishou.com/rest/e/v2/open/log/conv?action=600&pr",
////                                    result: 1
////                            }
////  ]
////                        }
//                        LogUtils.d(TAG, "获取服务端竞价信息v1成功,mBidResponseV1=");
//                        LogUtils.d(TAG, mBidResponseV1);
//
//                        //save to db
//
//                        // todo 此处为获取竞价成功，并非广告显示完成，需明确保存数据库的时机
//
//                        // todo 是否需要广告展示成功，才存入数据库
//
//                        // todo save to db
//                        // KSDBUtil.put(mBidResponseV1);
//
//
//                        // just for toast
//                        Gson gson = new Gson();
//                        BidResponse response = gson.fromJson(mBidResponseV1, BidResponse.class);
//                        if (response.adBids == null || response.adBids.isEmpty()) {
////                            showToast(context, "回包中竞价信息为空");
//
//                            LogUtils.d(TAG, "回包中竞价信息为空");
//
//                            callback("-1");
//
//                            callbackShowFail();
//                        } else {
//                            // 遍历 逐个 toast
//                            for (BidResponse.AdBid bid : response.adBids) {
//                                if (bid != null) {
//                                    final String msg =
//                                            " ecpm=" + bid.ecpm;
////                                    +
////                                                 " time=" + DateUtil.getReadableDate(System.currentTimeMillis() + "") +
////                                                    "\n bidEcpm=" + bid.bidEcpm +
////                                                    "\n creativeId=" + bid.creativeId +
////                                                    "\n materialId=" + bid.materialId +
////                                                    "\n etc=";
//
//                                    // fixme ks不要取多条，1条即可
//
//                                    callback(bid.ecpm + "");
//
//                                    mEcpm = bid.ecpm + "";
//
//                                    activity.runOnUiThread(new Runnable() {
//                                        @Override
//                                        public void run() {
//                                            //TToast.show(MainApplication.getAppContext(), msg);
//                                        }
//                                    });
//
//                                }
//                            }
//                        }
//
//
//                        // 竞价信息获取成功，请求广告
//                        showAdV1();
//
//                    }
//                });
//    }
//
//    // 展示竞价广告
//    private void showAdV1() {
//        if (TextUtils.isEmpty(mBidResponseV1)) {
//            //TToast.show(MainApplication.getAppContext(), "请先获取竞价信息");
//            return;
//        }
//        requestRewardAd();
//    }
//
//    // 回调通知ecpm，失败返回  -1
//    private void callback(String ecpm) {
//        if (callback != null) {
//            callback.onReceiveValue(ecpm);
//        }
//    }
//
//    public void showKsAd(boolean isShow, ValueCallback<String> callback) {
//        this.callback = callback;
//        this.isShow = isShow;
//        showKsAd();
//    }
//
//    public void showAd(ValueCallback<AdBean> callback) {
//        this.callbackShow = callback;
//        this.isShow = true;
//        showKsAd();
//    }
//
//    public void callbackShowSuccess() {// 播放成功回调
//        if (callbackShow == null) return;
//        // build AdBean for callback
//        AdBean bean = new AdBean();
//        bean.setShowSuccess(true);
//        bean.setEcpm(mEcpm);
//        bean.setAdn(Const.TYPE_KS);
//        bean.setAdType("激励视频");
//        callbackShow.onReceiveValue(bean);
//    }
//
//    public void callbackShowFail() {// 播放失败回调
//        if (callbackShow == null) return;
//        // build AdBean for callback
//        AdBean bean = new AdBean();
//        bean.setShowSuccess(false);
//        callbackShow.onReceiveValue(bean);
//    }
//
//    public void showKsAd() {
//        String adId = MMKVUtil.getInstance().getKV().decodeString(Const.KEY_AD_ID_KS);
//        mPosId = adId;
//
//        if (TextUtils.isEmpty(adId)) {
////                // 默认demo的appId
////                kv.encode(Const.KEY_AD_ID_KS, "90009001");
//            // 测试数据
////            mPosId = "90009001";
//            mPosId = "13013000001";
//        }
//
//        if (TextUtils.isEmpty(mPosId)) {
//            //TToast.show(MainApplication.getAppContext(), "mPosId不合法 " + mPosId);
//        } else {
//            // 普通广告
////                 requestRewardAd();
//            // 竞价广告
//            fetchBidResponseV1();
//        }
//    }
//    //  快手广告相关
//
//}
